GDB 调试命令 您所在的位置:网站首页 gdb 函数的返回值 GDB 调试命令

GDB 调试命令

2023-06-05 14:03| 来源: 网络整理| 查看: 265

常用

break                 b               设置断点。 run                     r               开始运行程序。运行到第一个断点位置,如果没有断点就直接运行结束。 next                   n               执行当前行。如果当前行包含函数调用,不会进入函数。 step                   s               执行当前行。如果当前行包含函数调用,则进入函数,执行函数体第一条语句。注意,如果函数是库函数或者第三方提供的函数,由于没有源代码,也无法进入函数体。 print                   p               显示变量或表达式的值。 continue            c               继续运行程序,直到下一个断点或者程序结束。 set var name = value                    设置变量的值。 quit                    q               退出gdb环境。

finish                fin                跳出当前函数

(gdb) list/l 行号或函数名 //列出源码 (gdb) l 30 25              int* pa = new int[10]; 26              memset(pa, 10*sizeof(int), 0); 27              printf("pa[0]:%d, pa[-1]:%d\n", pa[0], *(pa-4)); 28              pa[1] = 1, pa[2]=2, pa[3]=3; 29              --pa; 30              printf("cur *pa:%d\n", *pa); 31      } 32 33      int main() 34      { (gdb) break 29 Breakpoint 2 at 0x4007be: file mem.cpp, line 29.

其他

显示内容太多出现省略号时执行:set print elements 0,之后就会显示全部内容

backtrace/bt //查看函数调用栈帧

frame/f //选择栈帧,再查看局部变量

p *array@len //打印指针array指向地址的len长度的内容

print *(int*)p@10 //以int格式打印指针p指向地址中10长度的值

set var sum=0 //修改变量值

set args  设置主程序的参数

display/undisplay sum //每次停下显示变量的值/取消跟踪

delete breakpoints 2 //删除某个断点

disable/enable breakpoints 3 //禁用/启用某个断点

break 9 if sum != 0 //满足条件才激活断点

watch input[4] //设置观察点

x/7b input //打印存储器内容,b--每个字节一组,7--7组

disassemble/disas //反汇编当前函数或指定函数

si // 一条指令一条指令调试 而 s 是一行一行代码

thread apply bt all 调试core时查看所有线程堆栈

GDB时的x命令

x/

x:examine的缩写

n、f、u是可选的参数。

n 是一个正整数,表示显示内存的长度

也就是说从当前地址向后显示几个地址的内容。

(gdb) x/1 pa 0x602010:       0 (gdb) x/2 pa 0x602010:       0       1 (gdb) x/3 pa 0x602010:       0       1       2 (gdb) x/4 pa 0x602010:       0       1       2       3  

f 表示显示的格式

x 按十六进制格式显示变量。

d 按十进制格式显示变量。

u 按十六进制格式显示无符号整型。

o 按八进制格式显示变量。

t 按二进制格式显示变量。

a 按十六进制格式显示变量。

c 按字符格式显示变量。

f 按浮点数格式显示变量。

(gdb) x/4d pa 0x602010:       0       1       2       3 (gdb) x/4x pa 0x602010:       0x00000000      0x00000001      0x00000002      0x00000003 (gdb) x/4u pa 0x602010:       0       1       2       3 (gdb) x/4o pa 0x602010:       0       01      02      03 (gdb) x/4t pa 0x602010:       00000000000000000000000000000000        00000000000000000000000000000001        00000000000000000000000000000010        00000000000000000000000000000011

u 表示从当前地址往后请求的字节数

如果不指定的话,GDB默认是4个bytes。

u参数可以用下面的字符来代替,b表示单字节,h表示双字节,w表示四字节,g表示八字节。

当我们指定了字节长度后,GDB会从指内存定的内存地址开始,读写指定字节,并把其当作一个值取出来。

(gdb) x/4dh pa 0x602010:       0       0       1       0 (gdb) x/16db pa 0x602010:       0       0       0       0       1       0       0       0 0x602018:       2       0       0       0       3       0       0       0 (gdb) x/16b pa 0x602010:       0       0       0       0       1       0       0       0 0x602018:       2       0       0       0       3       0       0       0 (gdb) x/16h pa 0x602010:       0       0       1       0       2       0       3       0 0x602020:       0       0       0       0       0       0       0       0 (gdb) x/16w pa 0x602010:       0       1       2       3 0x602020:       0       0       0       0 0x602030:       0       0       135121  0 0x602040:       0       0       0       0



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有